package com.ywyself.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.ywyself.dao.CatelogDao;
import com.ywyself.ext.kit.YsKit;
import com.ywyself.ext.utils.YsStringUtils;
import com.ywyself.model.Catelog;

public class CatelogService {
    public static final CatelogService EXC = new CatelogService();

    private final CatelogDao catelogDao = new CatelogDao();

    /**
     * 新增一个分类
     * 
     * @param catelog
     *            分类信息模型
     * @return true|添加成功
     */
    public YsKit save(Catelog catelog) {
        return catelogDao.save(catelog);
    }

    /**
     * 新增一个分类
     * 
     * @param catelog
     *            分类信息模型
     * @return true|添加成功
     */
    public YsKit save(String name, String desc) {
        Catelog catelog = new Catelog().setName(name).setDescription(desc).setContentCount(0).setOrderNumber(1);
        return catelogDao.save(catelog);
    }

    /**
     * 根据id删除分类
     * 
     * @param id
     *            分类的id
     * @return true|删除成功
     */
    public YsKit delete(long id) {
        return catelogDao.delete(id);
    }

    /**
     * 修改分类信息
     * 
     * @param id
     *            分类id
     * @param name
     *            分类名称
     * @param desc
     *            分类说明
     * @return
     */
    public YsKit update(long id, String name, String desc) {
        return catelogDao.update(id, name, desc);
    }

    /**
     * 根据id查询分类的信息
     * 
     * @param id
     * @return
     */
    public Catelog get(long id) {
        return catelogDao.get(id);
    }

    /**
     * 查询分类的数量
     * 
     * @return
     */
    public long count() {
        return catelogDao.count();
    }

    /**
     * 查询某个日期之后的分类的数量
     * 
     * @param beginDate
     *            指定的日期
     * @return
     */
    public long count(Date beginDate) {
        return catelogDao.count(beginDate);
    }

    /**
     * 
     * 
     * @param pageNumber
     * @param pageSize
     * @param cond
     *            查询条件
     * @return data:Page<Record>
     */
    public Page<Record> pageByCond(int pageNumber, int pageSize, String name) {
        Kv cond = Kv.create();
        if (!YsStringUtils.isBlank(name)) {
            cond.set("name link '%", name.trim() + "%'");
        }
        return catelogDao.pageByCond(pageNumber, pageSize, cond);
    }

    // ===================== api ====================

    /**
     * api，查询分类
     * 
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public List<Map<String, Object>> listPageApi(int pageNumber, int pageSize) {
        Page<Record> page = catelogDao.pageByCond(pageNumber, pageSize, Kv.create());
        if (page.getTotalRow() > 0) {
            // 有数据
            List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>(pageSize);
            Iterator<Record> iterator = page.getList().iterator();
            while (iterator.hasNext()) {
                Record rec = (Record) iterator.next();
                listMap.add(rec.getColumns());
            }
            return listMap;
        } else {
            return new ArrayList<Map<String, Object>>(1);
        }
    }
}
